package com.example.no1admin.service.impl;

import com.example.no1admin.ex.ServiceException;
import com.example.no1admin.mapper.StoreMapper;
import com.example.no1admin.pojo.dto.store.StoreAddNewDTO;
import com.example.no1admin.pojo.dto.store.StoreEditDTO;
import com.example.no1admin.pojo.entity.Store;
import com.example.no1admin.pojo.vo.store.StoreDetailVO;
import com.example.no1admin.pojo.vo.store.StoreListItemVO;
import com.example.no1admin.service.IStoreService;
import com.example.no1admin.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class StoreServiceImpl implements IStoreService {
    
    @Autowired
    StoreMapper storeMapper;

    public StoreServiceImpl() {
        log.debug("创建业务逻辑对象：StoreServiceImpl");
    }

    @Override
    public void addNew(StoreAddNewDTO storeAddNewDTO) {
        log.debug("准备开始处理创建门店的业务，参数：{}",storeAddNewDTO);
        //根据门店名称判断门店是否存在
        String name = storeAddNewDTO.getName();
        int count = storeMapper.countByName(name);
        if(count > 0){
            String message = "创建门店失败，门店名称【"+name+"】已经存在！";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }

        //创建实体对象(mapper的方法参数是实体类型)
        Store store = new Store();
        //将当前方法参数的值复制到Brand实体类型的对象中
        BeanUtils.copyProperties(storeAddNewDTO,store);
        //补全属性值(不由客户端提交的属性的值，应该在插入之前补全)

        //将门店数据写入到数据库
        log.debug("即将向表中插入数据：{}",store);
        int rows = storeMapper.insert(store);
        if(rows!=1){
            String message = "创建门店失败，服务器忙，请稍后再试!";
            log.error(message);
            throw new ServiceException(ServiceCode.ERR_INSERT,message);
        }

    }

    @Override
    public void deleteById(Long id) {
        log.debug("开始处理删除门店的业务,id={}",id);
        StoreDetailVO store = storeMapper.getById(id);
        if(store==null){
            String message = "删除门店失败，尝试删除的数据【"+id+"】不存在！";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        int rows = storeMapper.deleteById(id);
        if(rows!=1){
            String message = "删除门店失败，服务器忙，请稍后再试!";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_DELETE,message);
        }
    }

    @Override
    public void updateById(StoreEditDTO storeEditDTO) {
        //将门店数据写入到数据库
        log.debug("即将向表中插入需要修改的数据：{}",storeEditDTO);
        int rows = storeMapper.updateById(storeEditDTO);
        if(rows!=1){
            String message = "修改门店失败，服务器忙，请稍后再试!";
            log.error(message);
            throw new ServiceException(ServiceCode.ERR_UPDATE,message);
        }
    }

    @Override
    public List<StoreListItemVO> list() {
        log.debug("开始处理查询门店列表的请求");
        return storeMapper.list();
    }
}
